package persistencia;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import domain.*;

public class AdministradorPersistenciaServicio {

	private static AdministradorPersistenciaServicio pool;

	private AdministradorPersistenciaServicio() {

	}

	public static AdministradorPersistenciaServicio getInstancia() {
		if (pool == null)
			pool = new AdministradorPersistenciaServicio();
		return pool;
	}

	public Servicio getServicio(int servicioId) {
		Connection con = PoolConnection.getPoolConnection().getConnection();
		Servicio servicio = null;
		try {
			String senten = "SELECT * from Servicios where ServicioId = ?";
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten);
			ps.setInt(1, servicioId);
			
			ResultSet result = ps.executeQuery();
			
			result.next();
			
			servicio = mapServicio(result);
			
			PoolConnection.getPoolConnection().realeaseConnection(con);
			
		} catch (SQLException e) {
			System.out.println("Error al obtener el servicio: "
					+ e.getMessage());		
			PoolConnection.getPoolConnection().realeaseConnection(con);
		}
		
		return servicio;		
	}
	
	private Servicio mapServicio(ResultSet result) throws SQLException {	
		
		if (result.getString("Tipo").equals("Sms")) return new SMS(result.getFloat("Valor"));
		if (result.getString("Tipo").equals("Datos")) return new Datos(result.getFloat("Valor"));
		if (result.getString("Tipo").equals("Voz")) return new Voz(result.getFloat("Valor"));		
		
		return null;		
	}
}
